package com.xdcplus.web.mapper.trace;

import com.xdcplus.mp.mapper.IBaseMapper;
import com.xdcplus.web.common.datasource.Doris;
import com.xdcplus.web.common.pojo.dto.trace.TpElTestFilterDTO;
import com.xdcplus.web.common.pojo.dto.trace.TpIvTestFilterDTO;
import com.xdcplus.web.common.pojo.dto.trace.TracePrdInfoFilterDTO;
import com.xdcplus.web.common.pojo.entity.trace.TracePrdInfo;
import com.xdcplus.web.common.pojo.entity.wip.WipUnpackPlan;
import com.xdcplus.web.common.pojo.query.trace.GetPrdInfoTraceDetailQuery;
import com.xdcplus.web.common.pojo.query.trace.GetPrdInfoTraceQuery;
import com.xdcplus.web.common.pojo.query.trace.QueryPrdEnterExitQtyQuery;
import com.xdcplus.web.common.pojo.vo.trace.GetPrdInfoTraceDetailVo;
import com.xdcplus.web.common.pojo.vo.trace.GetPrdInfoTraceVo;
import com.xdcplus.web.common.pojo.vo.trace.QueryPrdEnterExitQtyVo;
import com.xdcplus.web.common.pojo.vo.trace.TracePrdInfoViewVO;
import com.xdcplus.web.common.pojo.vo.wip.WipMarkingRecordVO;
import com.xdcplus.web.common.pojo.vo.wip.WipMarkingReportVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 单片追溯表(TracePrdInfo)表数据库访问层
 *
 * @author bullion.yan
 * @since 2023-04-23 10:00:42
 */
public interface TracePrdInfoMapper extends IBaseMapper<TracePrdInfo> {

    /**
     * 查询单片追溯表(TracePrdInfo)
     *
     * @return {@link List<TracePrdInfo>}
     */
    @Doris
    List<TracePrdInfo> queryTracePrdInfo(
            @Param("startTime") String startTime,
            @Param("endTime") String endTime,
            @Param("opeCode") String opeCode,
            @Param("boxList") List<String> boxList);

    /**
     * 查询追溯详情接口(正序、倒序)
     *
     * @param getPrdInfoTraceDetailQuery
     * @return
     */
    List<GetPrdInfoTraceDetailVo> getPrdInfoTraceDetail(GetPrdInfoTraceDetailQuery getPrdInfoTraceDetailQuery);

    /**
     * 单片信息追溯
     *
     * @param getPrdInfoTraceQuery
     * @return
     */
    List<GetPrdInfoTraceVo> getPrdInfoTrace(GetPrdInfoTraceQuery getPrdInfoTraceQuery);

    List<TracePrdInfo> queryByMarkingId(@Param("markingId") Long markingId);

    List<TracePrdInfo> queryByPrdCodes(@Param("prdCodes") List<String> prdCodes);

    /**
     * 片级追溯视图
     * @param filterDTO
     * @return {@link List}<{@link TracePrdInfoViewVO}>
     */
    List<TracePrdInfoViewVO> singleTraceView(TpElTestFilterDTO filterDTO);

    /**
     * 正向追溯视图
     * @param filterDTO
     * @return {@link List}<{@link TracePrdInfoViewVO}>
     */
    List<TracePrdInfoViewVO> obverseTraceView(TracePrdInfoFilterDTO filterDTO);

    /**
     * 反向追溯视图
     * @param filterDTO
     * @return {@link List}<{@link TracePrdInfoViewVO}>
     */
    List<TracePrdInfoViewVO> reverseTraceView(TpIvTestFilterDTO filterDTO);

    List<QueryPrdEnterExitQtyVo> queryPrdEnterExitQty(QueryPrdEnterExitQtyQuery queryPrdEnterExitQtyQuery);

    @Doris
    List<String> queryOpeCodeByMarkingCode(@Param("markCode") String markCode);

    @Doris
    List<String> queryOpeCOdeByBatchNo(WipUnpackPlan wipUnpackPlan);
    @Doris
    List<WipMarkingRecordVO> queryWipMarkingFlow(@Param("prdCodes") List<String> prdCodes);
}

